# 登录接口测试
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
# from pytest import rerun
# from pytest_rerunfailures.plugin import rerun

class TestCaseLogin(HttpRunner):
    # @rerun(3, delay=2)  # 仅对此用例生效
    config = (
        Config("用户登录验证")
        # 设置基础URL（从config模块读取）
        .base_url("${read_config()}")
        .variables(**{
            # 定义用例级变量
            "username": "admin",
            "password": "8i4De25KlVQVwqTDgTNGqw=="
        })
        # 关闭SSL证书验证（仅测试环境用）
        .verify(False)
        # 导出变量供其他用例使用
        .export(*["token", "Uid"])
    )

    teststeps = [
        Step(
            # 步骤名称（日志中显示）
            RunRequest("密码登录")
            # POST请求，路径拼接在base_url后
            .post("/api/user/login")
            .with_headers(content_type="application/json; charset=utf-8")
            .with_json({
                # 引用config中的变量
                "username": "$username",
                # 调用内置md5函数加密
                "password": "$password"
            })
            # 提取响应数据
            .extract()
            # 从JSON中提取token并存储到变量
            .with_jmespath("body.token", "token")
            .with_jmespath("body.data.pk_id", "Uid")
            # 断言区块
            .validate()
            # 验证状态码
            .assert_equal("status_code", 200)
            # 验证token长度为32
            # .assert_length_equal("body.token", 32)
            # 验证响应时间<500ms
            # .assert_less_than("body.time_used", 500)  # 响应时间<500ms
        )

    ]
